package org.dbp.error;

import org.dbp.error.exception.ExceptionDbp;
import org.slf4j.Logger;

public class ErrorDbpUtils {

	private  static ErrorDbpUtils instancia=new ErrorDbpUtils();
	
	
	private MensajeriaDbpUtils mensajeriaUtils;
	public static ErrorDbpUtils obtenerInstancia(){
		return instancia;
	}
	
	
	private ErrorDbpUtils() {
		mensajeriaUtils=MensajeriaDbpUtils.obtenerInstancia();
	}
	/**
	 * 
	 * Se encarga de procesar el error desde una clave 
	 * 
	 * @param logger		Es el logger, de la clase que procesa el error.
	 * @param e				La excepcion del error.
	 * @param clave			La clave que vamos a ir a buscar.
	 * @param parametros	Los parametros con los que vamos a trabajar.
	 * @throws ExceptionDbp
	 */
	public void procesarErrorClave(final Logger logger,final Throwable e,final String clave,final Object... parametros) throws ExceptionDbp{
		String mensajeError=mensajeriaUtils.obtenerMensaje(clave, true, parametros);
		procesarError(logger,mensajeError,e);
	}
	/**
	 * 
	 * Se encarga de procesar el error desde una clave 
	 * 
	 * @param logger		Es el logger, de la clase que procesa el error.
	 * @param clave			La clave que vamos a ir a buscar.
	 * @param parametros	Los parametros con los que vamos a trabajar.
	 * @throws ExceptionDbp
	 */
	public void procesarErrorClave(final Logger logger,final String clave,final Object... parametros) throws ExceptionDbp{
		String mensajeError=mensajeriaUtils.obtenerMensaje(clave, true, parametros);
		procesarError(logger,mensajeError);
	}

	
	/**
	 * 
	 * Se encarga de procesar el error, dentro de la libreria. 
	 * 
	 * @param logger			El logger, donde queremos que se pinte el error.
	 * @param error				El mensaje de error en cuesti�n.
	 * @param e					La excepcion del error.
	 * @throws ExceptionDbp
	 */
	public void procesarError(final Logger logger,final String error,final Throwable e) throws ExceptionDbp{
		logger.error(error,e);
		throw new ExceptionDbp(error,e);
	}
	/**
	 * 
	 * Se encarga de procesar el error, dentro de la libreria, que no se usa una excepcion.
	 * 
	 * @param logger			El logger, donde queremos que se pinte el error.
	 * @param error				El mensaje de error en cuesti�n.
	 * @throws ExceptionDbp
	 */
	public void procesarError(final Logger logger, final String error)throws ExceptionDbp{
		logger.error(error);
		throw new ExceptionDbp(error);
	}
	
}
